﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>类型 - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The 类型 function returns the exact 类型 of a value." />
<meta name="ahk:equiv-v1" content="AutoHotkey.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>类型</h1>
<p>返回值的确切类型.</p>
<pre class="Syntax">类型 := <span class="func">类型</span>(Value)</pre>

<h2 id="Return_Value">返回值</h2>
<p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
<p>函数返回 <em>Value</em> 的类型. 对于原始值, 返回值是以下之一:</p>
<ul>
  <li>字符串(字符串)</li>
  <li>整数(整数)</li>
  <li>浮点数(浮点数)</li>
</ul>
<p>如果 <em>Value</em> 是一个对象, 那么返回值就是对象的类名.</p>
<p>对于<a href="../objects/Object.htm">对象</a>类型, 类名是动态的, 使用如下算法确定:</p>
<pre>
Object_Type(Value) {
    如果 包含属性(Value, "__Class")  <em>; 确保不会将类报告为基类的实例.</em>
        返回 "Class"
    while Value := Value.base
        如果 包含属性(Value, "__Class")
            返回 Value.__Class
    返回 "Object"
}
</pre>
<p>但是, 与此函数不同, 类型 函数不会导致调用对象的元函数.</p>
<p>对于 COM 包装器对象, 返回值类型取决于包装的<a href="ComObjType.htm">变体类型</a>. 使用如下算法确定:</p>
<pre>
ComObject_Type(obj)
{
    如果 组件对象类型(obj) &amp; 0x2000 <em>; VT_ARRAY</em>
        返回 "<a href="ComObjArray.htm">组件对象数组</a>"
    如果 组件对象类型(obj) &amp; 0x4000 <em>; VT_BYREF</em>
        返回 "<a href="ComObject.htm#ByRef">ComObjRef</a>"
    如果 (组件对象类型(obj) = 9 || 组件对象类型(obj) = 13) <em>; VT_DISPATCH || VT_UNKNOWN</em>
        &amp;&amp; 组件对象值(obj) != 0
    {
        如果 (classname := <a href="ComObjType.htm">组件对象类型</a>(obj, "Class")) != ""
            返回 classname
        如果 组件对象类型(obj) = 9 <em>; VT_DISPATCH</em>
            返回 "ComObject"
    }
    返回 "ComObj"
}
</pre>

<h2 id="Remarks">备注</h2>
<p>通常不应该使用此函数来确定一个值是否是数值, 因为数值 <em>字符串</em> 在数学表达式和大多数内置函数中都是有效的. 但是, 在某些情况下, 值的确切类型更为重要.</p>
<p>要检查一个值是否可以用作数字, 请使用 <a href="Is.htm#number">是否数字</a>, <a href="Is.htm#integer">是否整数</a> 或 <a href="Is.htm#float">是否浮点数</a> 函数.</p>
<p>要检查任何类型的对象, 请使用表达式 <a href="IsObject.htm">是否对象</a> 函数.</p>
<p>要检查对象是否派生自特定的用户定义类, 请使用 <a href="../Variables.htm#is"><code>is</code></a> 运算符.</p>
<p>对于内置类型, 不能直接引用对象的类.</p>

<h2 id="Related">相关</h2>
<p><a href="../Concepts.htm#values">值</a>, <a href="../Language.htm#expressions">表达式</a>, <a href="Is.htm">Is 函数</a>, <a href="Integer.htm">整数</a>, <a href="Float.htm">浮点数</a>, <a href="String.htm">字符串</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a href="#ExBasic">#1</a></p>
<pre>
a := 1, b := 2.0, c := "3"
信息框 类型(a)  <em>; 整数</em>
信息框 类型(b)  <em>; 浮点数</em>
信息框 类型(c)  <em>; 字符串</em>
</pre>
</div>

</body>
</html>